//Test.java
public class Test {
    public static void main(String[] args) {
       /* Dog dog = new Dog();
        dog.name = "小狗";
        //Dog类从Animal类继承下的成员变量
        System.out.println(dog.name);
        //Dog类从Animal类继承下的方法
        dog.eat();
        dog.sleep();
        //这是个性的方法
        dog.say();*/

        Derived derived = new Derived();
        derived.method();
        System.out.println(derived.a);
        System.out.println(derived.b);
    }
}

class Base {
    int a;
    int b;
    int c;
}
/////////////////////////////////////////////////////////////////
class Derived extends Base{
    int a; // 与父类中成员a同名，且类型相同
    char b; // 与父类中成员b同名，但类型不同
    public void method(){
        a = 100; // 访问父类继承的a，还是子类自己新增的a？
        b = 101; // 访问父类继承的b，还是子类自己新增的b?
        c = 102; // 子类没有c，访问的肯定是从父类继承下来的c
// d = 103; // 编译失败，因为父类和子类都没有定义成员变量b
    }


}

//A.java
class A{
    //...
}

//B.java
class B extends A{  //报错
   //...
}

//Test.java
class Test1{
    public static void main(String[] args) {
        B b1 = new B();
        System.out.println("===========");
        B b2 = new B();
    }
}



class Tire{ //轮胎
    //...
}
class Engine{   //发动机
    //...
}
//方向盘类...
class Car{  //将上面的类组合到一起
    private Tire tire;  //可以复用轮胎的成员
    private Engine engine;  //可以复用发动机的成员
    //...
}

//比亚迪是汽车
class BYD extends Car{
    //将汽车中包含的：轮胎、发送机等都继承下来
}


class WashMachine{  //洗衣机类
    //成员属性/成员变量
    public String brand;    //品牌
    public String type; //类型
    public int weight;  //重量
    public String color;    //颜色

    //成员方法
    public void wash(){ //洗衣服功能
        System.out.println("洗衣服");
    }
    public void dry(){  //脱水功能
        System.out.println("脱水");
    }
}

class PetDog{
    public String type = "金毛"; //类型
    public String name = "大狗"; //名字
    public int age; //年龄

    //构造方法(与下面那个是方法的重载（参数列表不一样）)
    public PetDog(){
        //this调用下面那个构造方法来完成初始化
        this("金毛","大狗",5);
    }
    public PetDog(String type,String name,int age)
    {
        this.type = type;   //当形参和实参名字相同时，
        this.name = name;   //this告诉编译器这个type、name和age
        this.age = age;     //是属于哪个对象的
    }

    public void bark(){
        System.out.println(name + "汪汪！！");
    }
    public void wag(){
        System.out.println(name + "摇尾巴~~");
    }
}

class TestDog{
    public static void main(String[] args) {
        PetDog mydog = new PetDog("哈士奇","小狗",4);
        PetDog mydog1 = new PetDog();   //调用无参的那个构造方法
        mydog.bark();
        mydog.wag();
        mydog1.bark();
        mydog1.wag();
    }
}









